#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=2e5+1000;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL x[maxn],y[maxn];
bool vis[maxn];
bool cmp(LL A,LL B){
    return A>B;
}
struct P{
    LL x,y,id;
}a[maxn];
bool cmp1(P A,P B){
     if(A.x==B.x) return A.y<B.y;
     return A.x<B.x;
}
bool cmp2(P A,P B){
     if(A.y==B.y) return A.x<B.x;
     return A.y<B.y;
}
int main(void){
   	cin.tie(0);std::ios::sync_with_stdio(false);
    LL n;cin>>n;
    for(LL i=1;i<=n;i++) cin>>a[i].x>>a[i].y,a[i].id=i;

//
//    vector<P>ans;
//    sort(a+1,a+1+n,cmp1);
//    for(LL i=1;i<=min((LL)100,n);i++){
//        if(!vis[a[i].id]){
//            ans.push_back({a[i].x,a[i].y});
//            vis[a[i].id]=true;
//        }
//    }
//    for(LL i=n;i>=max(1LL,n-100);i--){
//        if(!vis[a[i].id]){
//            ans.push_back({a[i].x,a[i].y});
//            vis[a[i].id]=true;
//        }
//    }
//    sort(a+1,a+1+n,cmp2);
//
//    for(LL i=1;i<=min((LL)100,n);i++){
//        if(!vis[a[i].id]){
//            ans.push_back({a[i].x,a[i].y});
//            vis[a[i].id]=true;
//        }
//    }
//    for(LL i=n;i>=max(1LL,n-100);i--){
//        if(!vis[a[i].id]){
//            ans.push_back({a[i].x,a[i].y});
//            vis[a[i].id]=true;
//        }
//    }
//    LL sum=-1;
//    vector<LL>k;
//    for(LL i=0;i<ans.size()-1;i++){
//       / sum=max(sum,max(abs(ans[i].x-ans[i+1].y),abs(ans[i].y-ans[i+1].y)));
//        k.push_back(max(abs(ans[i].x-ans[i+1].x),abs(ans[i].y-ans[i+1].y)));
//    }
//    sort(k.begin(),k.end(),cmp);
//    cout<<k[1]<<"\n";
//    for(LL i=1;i<=n;i++){
//        cout<<a[i].x<<" "<<a[i].y<<"\n";
//    }
    sort(a+1,a+1+n,cmp1);
    vector<LL>ans;

    ans.push_back(max(abs(a[1].x-a[n].x),abs(a[1].y-a[n].y)));
    ans.push_back(max(abs(a[1].x-a[n-1].x),abs(a[1].y-a[n-1].y)));
    ans.push_back(max(abs(a[2].x-a[n].x),abs(a[2].y-a[n].y)));
    vis[a[1].id]=vis[a[2].id]=vis[a[n].id]=vis[a[n-1].id]=true;

    sort(a+1,a+1+n,cmp2);
    if(!vis[a[1].id]&&!vis[a[n].id])  ans.push_back(max(abs(a[1].x-a[n].x),abs(a[1].y-a[n].y)));
    if(!vis[a[1].id]&&!vis[a[n-1].id]) ans.push_back(max(abs(a[1].x-a[n-1].x),abs(a[1].y-a[n-1].y)));
    if(!vis[a[2].id]&&!vis[a[n].id]) ans.push_back(max(abs(a[2].x-a[n].x),abs(a[2].y-a[n].y)));
    sort(ans.begin(),ans.end(),cmp);

    cout<<ans[1]<<"\n";
   	return 0;
}
